package com.aiserver.mapper;

import com.aiserver.entity.User;
import com.aiserver.dto.UserQueryCondition;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 用户Mapper接口
 */
@Mapper
public interface UserMapper {
    // ========== XML映射方法 ==========
    
    /**
     * 根据条件查询用户列表
     */
    List<User> findUsersByCondition(UserQueryCondition condition);
    
    /**
     * 分页查询用户列表
     */
    List<User> findUsersWithPage(@Param("condition") UserQueryCondition condition);
    
    /**
     * 根据条件统计用户数量
     */
    long countUsersByCondition(UserQueryCondition condition);
    
    /**
     * 批量更新用户状态
     */
    int batchUpdateUserStatus(@Param("userIds") List<Long> userIds, @Param("status") Integer status);
    
    /**
     * 根据多个条件查询用户
     */
    List<User> findUsersByMultipleConditions(@Param("searchType") String searchType, 
                                            @Param("keyword") String keyword,
                                            @Param("status") Integer status,
                                            @Param("orderBy") String orderBy);
    
    /**
     * 查询活跃用户（最近登录）
     */
    List<User> findActiveUsers(@Param("days") Integer days, @Param("limit") Integer limit);
    
    // ========== 基础CRUD方法 ==========
    
    User findByUsername(@Param("username") String username);
    
    User findByPhone(@Param("phone") String phone);
    
    User findByWechatOpenId(@Param("wechatOpenId") String wechatOpenId);
    
    User findByWechatUnionId(@Param("wechatUnionId") String wechatUnionId);
    
    User findById(@Param("id") Long id);
    
    int insert(User user);
    
    int update(User user);
    
    int updateLoginFailCount(@Param("id") Long id, @Param("loginFailCount") Integer loginFailCount);
    
    int resetLoginFailCount(@Param("id") Long id);
    
    int updateStatus(@Param("id") Long id, @Param("status") Integer status);
    
    int deleteById(@Param("id") Long id);
    
    long countByUsername(@Param("username") String username);
    
    long countByPhone(@Param("phone") String phone);
    
    long countByEmail(@Param("email") String email);
}